<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>SerwerCzatu.java</title>
</head>
<body bgcolor="white">
<pre><tt><font color="#000000">001:</font> <i><font color="#9A1900">// KI-ChatSerwerTCP/SerwerCzatu.java</font></i>
<font color="#000000">002:</font>  
<font color="#000000">003:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>BufferedReader<font color="#990000">;</font>
<font color="#000000">004:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>IOException<font color="#990000">;</font>
<font color="#000000">005:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>InputStreamReader<font color="#990000">;</font>
<font color="#000000">006:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>OutputStreamWriter<font color="#990000">;</font>
<font color="#000000">007:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>io<font color="#990000">.</font>PrintWriter<font color="#990000">;</font>
<font color="#000000">008:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>net<font color="#990000">.</font>ServerSocket<font color="#990000">;</font>
<font color="#000000">009:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>net<font color="#990000">.</font>Socket<font color="#990000">;</font>
<font color="#000000">010:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>util<font color="#990000">.</font>HashSet<font color="#990000">;</font>
<font color="#000000">011:</font> <b><font color="#000080">import</font></b> java<font color="#990000">.</font>util<font color="#990000">.</font>Set<font color="#990000">;</font>
<font color="#000000">012:</font> 
<font color="#000000">013:</font> <i><font color="#9A1900">/** Najprostszy serwer czatu; T.R. Werner, 2006 */</font></i>
<font color="#000000">014:</font> <b><font color="#0000FF">public</font></b> <b><font color="#0000FF">class</font></b> <font color="#009900">SerwerCzatu</font> <font color="#FF0000">{</font>
<font color="#000000">015:</font> 
<font color="#000000">016:</font>     <b><font color="#0000FF">final</font></b> <b><font color="#0000FF">static</font></b> <font color="#009900">int</font> PORT <font color="#990000">=</font> <font color="#993399">54321</font><font color="#990000">;</font>
<font color="#000000">017:</font>     <b><font color="#0000FF">static</font></b> Set<font color="#990000">&lt;</font>Rozmowa<font color="#990000">&gt;</font> rozmowy <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> HashSet<font color="#990000">&lt;</font>Rozmowa<font color="#990000">&gt;();</font>
<font color="#000000">018:</font> 
<font color="#000000">019:</font>     <b><font color="#0000FF">synchronized</font></b>
<font color="#000000">020:</font>     <b><font color="#0000FF">static</font></b> <font color="#009900">void</font> <b><font color="#000000">addRozmowa</font></b><font color="#990000">(</font>Rozmowa Rozmowa<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">021:</font>         rozmowy<font color="#990000">.</font><b><font color="#000000">add</font></b><font color="#990000">(</font>Rozmowa<font color="#990000">);</font>
<font color="#000000">022:</font>     <font color="#FF0000">}</font>
<font color="#000000">023:</font> 
<font color="#000000">024:</font>     <b><font color="#0000FF">synchronized</font></b>
<font color="#000000">025:</font>     <b><font color="#0000FF">static</font></b> <font color="#009900">void</font> <b><font color="#000000">removeRozmowa</font></b><font color="#990000">(</font>Rozmowa Rozmowa<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">026:</font>         rozmowy<font color="#990000">.</font><b><font color="#000000">remove</font></b><font color="#990000">(</font>Rozmowa<font color="#990000">);</font>
<font color="#000000">027:</font>     <font color="#FF0000">}</font>
<font color="#000000">028:</font> 
<font color="#000000">029:</font>     <b><font color="#0000FF">synchronized</font></b>
<font color="#000000">030:</font>     <b><font color="#0000FF">static</font></b> <font color="#009900">void</font> <b><font color="#000000">broadcast</font></b><font color="#990000">(</font>String nick<font color="#990000">,</font>
<font color="#000000">031:</font>                                        String message<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">032:</font>         message <font color="#990000">=</font> nick <font color="#990000">+</font> <font color="#FF0000">": "</font> <font color="#990000">+</font> message<font color="#990000">;</font>
<font color="#000000">033:</font>         <b><font color="#0000FF">for</font></b> <font color="#990000">(</font>Rozmowa t <font color="#990000">:</font> rozmowy<font color="#990000">)</font> t<font color="#990000">.</font>out<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font>message<font color="#990000">);</font>
<font color="#000000">034:</font>     <font color="#FF0000">}</font>
<font color="#000000">035:</font> 
<font color="#000000">036:</font> 
<font color="#000000">037:</font>     <b><font color="#0000FF">public</font></b> <b><font color="#0000FF">static</font></b> <font color="#009900">void</font> <b><font color="#000000">main</font></b><font color="#990000">(</font>String<font color="#990000">...</font> args<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">038:</font> 
<font color="#000000">039:</font>         ServerSocket serverSocket <font color="#990000">=</font> <b><font color="#0000FF">null</font></b><font color="#990000">;</font>
<font color="#000000">040:</font>         <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font>
<font color="#000000">041:</font>             serverSocket <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">ServerSocket</font></b><font color="#990000">(</font>PORT<font color="#990000">,</font><font color="#993399">15</font><font color="#990000">);</font>
<font color="#000000">042:</font>             System<font color="#990000">.</font>err<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font><font color="#FF0000">"Serwer wystartowal..."</font><font color="#990000">);</font>
<font color="#000000">043:</font>         <font color="#FF0000">}</font> <b><font color="#0000FF">catch</font></b><font color="#990000">(</font>IOException e<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">044:</font>             System<font color="#990000">.</font>err<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font><font color="#FF0000">"Serwer padl..."</font><font color="#990000">);</font>
<font color="#000000">045:</font>             System<font color="#990000">.</font><b><font color="#000000">exit</font></b><font color="#990000">(</font><font color="#993399">1</font><font color="#990000">);</font>
<font color="#000000">046:</font>         <font color="#FF0000">}</font>
<font color="#000000">047:</font> 
<font color="#000000">048:</font>         <b><font color="#0000FF">while</font></b> <font color="#990000">(</font><b><font color="#0000FF">true</font></b><font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">049:</font>             <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font>
<font color="#000000">050:</font>                 Socket soc <font color="#990000">=</font> serverSocket<font color="#990000">.</font><b><font color="#000000">accept</font></b><font color="#990000">();</font>
<font color="#000000">051:</font>                 Rozmowa r <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">Rozmowa</font></b><font color="#990000">(</font>soc<font color="#990000">);</font>
<font color="#000000">052:</font>                 r<font color="#990000">.</font><b><font color="#000000">start</font></b><font color="#990000">();</font>
<font color="#000000">053:</font>             <font color="#FF0000">}</font> <b><font color="#0000FF">catch</font></b><font color="#990000">(</font>IOException e<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">054:</font>                 System<font color="#990000">.</font>err<font color="#990000">.</font><b><font color="#000000">println</font></b><font color="#990000">(</font><font color="#FF0000">"Polaczenie padlo..."</font><font color="#990000">);</font>
<font color="#000000">055:</font>             <font color="#FF0000">}</font>
<font color="#000000">056:</font>         <font color="#FF0000">}</font>
<font color="#000000">057:</font>     <font color="#FF0000">}</font>
<font color="#000000">058:</font> 
<font color="#000000">059:</font>       <i><font color="#9A1900">// Klasa pojedynczej rozmowy</font></i>
<font color="#000000">060:</font>     <b><font color="#0000FF">static</font></b> <b><font color="#0000FF">class</font></b> <font color="#009900">Rozmowa</font> <b><font color="#0000FF">extends</font></b> Thread <font color="#FF0000">{</font>
<font color="#000000">061:</font>         Socket         soc <font color="#990000">=</font> <b><font color="#0000FF">null</font></b><font color="#990000">;</font>
<font color="#000000">062:</font>         BufferedReader  in <font color="#990000">=</font> <b><font color="#0000FF">null</font></b><font color="#990000">;</font>
<font color="#000000">063:</font>         PrintWriter    out <font color="#990000">=</font> <b><font color="#0000FF">null</font></b><font color="#990000">;</font>
<font color="#000000">064:</font>         String        nick<font color="#990000">;</font>
<font color="#000000">065:</font> 
<font color="#000000">066:</font>         <b><font color="#000000">Rozmowa</font></b><font color="#990000">(</font>Socket soc<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">067:</font>             <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font>
<font color="#000000">068:</font>                 out <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">PrintWriter</font></b><font color="#990000">(</font>
<font color="#000000">069:</font>                           <b><font color="#0000FF">new</font></b> <b><font color="#000000">OutputStreamWriter</font></b><font color="#990000">(</font>
<font color="#000000">070:</font>                               soc<font color="#990000">.</font><b><font color="#000000">getOutputStream</font></b><font color="#990000">()),</font><b><font color="#0000FF">true</font></b><font color="#990000">);</font>
<font color="#000000">071:</font>                 in  <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">BufferedReader</font></b><font color="#990000">(</font>
<font color="#000000">072:</font>                           <b><font color="#0000FF">new</font></b> <b><font color="#000000">InputStreamReader</font></b><font color="#990000">(</font>
<font color="#000000">073:</font>                               soc<font color="#990000">.</font><b><font color="#000000">getInputStream</font></b><font color="#990000">()));</font>
<font color="#000000">074:</font>                 soc <font color="#990000">=</font> soc<font color="#990000">;</font>
<font color="#000000">075:</font>             <font color="#FF0000">}</font> <b><font color="#0000FF">catch</font></b><font color="#990000">(</font>IOException e<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">return</font></b><font color="#990000">;</font> <font color="#FF0000">}</font>
<font color="#000000">076:</font>         <font color="#FF0000">}</font>
<font color="#000000">077:</font> 
<font color="#000000">078:</font>         <b><font color="#0000FF">public</font></b> <font color="#009900">void</font> <b><font color="#000000">run</font></b><font color="#990000">()</font> <font color="#FF0000">{</font>
<font color="#000000">079:</font>             String line<font color="#990000">;</font>
<font color="#000000">080:</font>             <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font>
<font color="#000000">081:</font>                 nick <font color="#990000">=</font> in<font color="#990000">.</font><b><font color="#000000">readLine</font></b><font color="#990000">();</font>
<font color="#000000">082:</font>                 <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>nick <font color="#990000">==</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font> <b><font color="#0000FF">return</font></b><font color="#990000">;</font>
<font color="#000000">083:</font>                 SerwerCzatu<font color="#990000">.</font><b><font color="#000000">addRozmowa</font></b><font color="#990000">(</font><b><font color="#0000FF">this</font></b><font color="#990000">);</font>
<font color="#000000">084:</font>                 SerwerCzatu<font color="#990000">.</font><b><font color="#000000">broadcast</font></b><font color="#990000">(</font>nick<font color="#990000">,</font><font color="#FF0000">"WSZEDL"</font><font color="#990000">);</font>
<font color="#000000">085:</font> 
<font color="#000000">086:</font>                 <b><font color="#0000FF">while</font></b> <font color="#990000">(</font><b><font color="#0000FF">true</font></b><font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">087:</font>                     line <font color="#990000">=</font> in<font color="#990000">.</font><b><font color="#000000">readLine</font></b><font color="#990000">();</font>
<font color="#000000">088:</font>                     <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>line <font color="#990000">==</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font> <b><font color="#0000FF">return</font></b><font color="#990000">;</font>
<font color="#000000">089:</font>                     SerwerCzatu<font color="#990000">.</font><b><font color="#000000">broadcast</font></b><font color="#990000">(</font>nick<font color="#990000">,</font>line<font color="#990000">);</font>
<font color="#000000">090:</font>                 <font color="#FF0000">}</font>
<font color="#000000">091:</font> 
<font color="#000000">092:</font>             <font color="#FF0000">}</font> <b><font color="#0000FF">catch</font></b> <font color="#990000">(</font>IOException ignore<font color="#990000">)</font> <font color="#FF0000">{</font>
<font color="#000000">093:</font>             <font color="#FF0000">}</font> <b><font color="#0000FF">finally</font></b> <font color="#FF0000">{</font>
<font color="#000000">094:</font> 
<font color="#000000">095:</font>                 SerwerCzatu<font color="#990000">.</font><b><font color="#000000">removeRozmowa</font></b><font color="#990000">(</font><b><font color="#0000FF">this</font></b><font color="#990000">);</font>
<font color="#000000">096:</font>                 SerwerCzatu<font color="#990000">.</font><b><font color="#000000">broadcast</font></b><font color="#990000">(</font>nick<font color="#990000">,</font><font color="#FF0000">"WYSZEDL"</font><font color="#990000">);</font>
<font color="#000000">097:</font>                 <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font> <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>in  <font color="#990000">!=</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font>  in<font color="#990000">.</font><b><font color="#000000">close</font></b><font color="#990000">();</font> <font color="#FF0000">}</font>
<font color="#000000">098:</font>                 <b><font color="#0000FF">catch</font></b><font color="#990000">(</font>IOException ignore<font color="#990000">)</font> <font color="#FF0000">{</font> <font color="#FF0000">}</font>
<font color="#000000">099:</font>                 <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>out <font color="#990000">!=</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font> out<font color="#990000">.</font><b><font color="#000000">close</font></b><font color="#990000">();</font>
<font color="#000000">100:</font>                 <b><font color="#0000FF">try</font></b> <font color="#FF0000">{</font> <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>soc <font color="#990000">!=</font> <b><font color="#0000FF">null</font></b><font color="#990000">)</font> soc<font color="#990000">.</font><b><font color="#000000">close</font></b><font color="#990000">();</font> <font color="#FF0000">}</font>
<font color="#000000">101:</font>                 <b><font color="#0000FF">catch</font></b><font color="#990000">(</font>IOException ignore<font color="#990000">)</font> <font color="#FF0000">{</font> <font color="#FF0000">}</font>
<font color="#000000">102:</font>             <font color="#FF0000">}</font>
<font color="#000000">103:</font>         <font color="#FF0000">}</font>
<font color="#000000">104:</font>     <font color="#FF0000">}</font>
<font color="#000000">105:</font> <font color="#FF0000">}</font></tt></pre>
</body>
</html>
